<?php

namespace Xrfg\Api\Trading\Account\Rules;

use Xrfg\Core\Trading\Account\Models\Coin;

class Validator
{
    /**
     * 提币地址格式验证
     *
     * @param $attribute
     * @param $value
     * @param $parameters
     * @param $validator
     *
     * @return bool
     */
    public function walletAddressValidator($attribute, $value, $parameters, $validator)
    {
        $coin = Coin::find($parameters[0]);
        if (!$coin) {
            return true;
        }

        switch (strtoupper($coin->name)) {
            case 'USDT':
                if ('ERC20' == $parameters[1]) {
                    // 42个字符，0x开头，后面由大小写字母与数字0-9组成
                    if (!preg_match('/^0x?[0-9a-zA-Z]{40}$/', $value)) {
                        return false;
                    } else {
                        return true;
                    }
                } else if ('TRC20' == $parameters[1]) {
                    // 34个字符，T开头，后面由大小写字母与数字0-9组成
                    if (!preg_match('/^T[0-9a-fA-F]{33}$/', $value)) {
                        return false;
                    } else {
                        return true;
                    }
                } else {
                    if (!(preg_match('/^(1|3)[a-zA-Z\d]{24,33}$/', $value) && preg_match('/^[^0OlI]{25,34}$/', $value))) {
                        return false;
                    } else {
                        return true;
                    }
                }
                // no break
            case 'BTC':
                if (!(preg_match('/^(1|3)[a-zA-Z\d]{24,33}$/', $value) && preg_match('/^[^0OlI]{25,34}$/', $value))) {
                    return false;
                } else {
                    return true;
                }
                // no break
            case 'EOS':
                //12个字符，由小写字母和数字1-5组成
                if (!preg_match('/(^[1-5]{12}$)|(^[a-z]{12}$)|(^[1-5a-z]{12}$)/', $value)) {
                    return false;
                } else {
                    return true;
                }
                // no break
            case 'XRP':
                if (!preg_match('/^r[rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz]{27,35}$/', $value)) {
                    return false;
                } else {
                    return true;
                }
                // no break
            case 'ETH':
            case 'HT':
            case 'AE':
            case 'OPTC':
            case 'ET':
            case 'TOCOS':
            case 'HDT':
                // 42个字符，0x开头，后面由大小写字母与数字0-9组成
                if (!preg_match('/^0x?[0-9a-fA-F]{40}$/', $value)) {
                    return false;
                } else {
                    return true;
                }
                // no break
            case 'TRX':
                // 34个字符，T开头，后面由大小写字母与数字0-9组成
                if (!preg_match('/^T[0-9a-zA-Z]{33}$/', $value)) {
                    return false;
                } else {
                    return true;
                }
            // no break
            default:
                return true;
        }
    }
}
